home *** CD-ROM | disk | FTP | other *** search
/ HTBasic 9.3 / HTBasic 9.3.iso / 83win / data1.cab / Basic_Plus_Examples / STRIPCTR < prev    next >
Text File  |  2001-03-02  |  7KB  |  182 lines

  1. 10    ! ******************************************************************
  2. 20    ! Example: STRIPCHART (Counter States)
  3. 30    !
  4. 40    ! This program demonstrates stripchart operation. It generates
  5. 50    ! a PANEL and places a STRIPCHART in it. The STRIPCHART widget
  6. 60    ! then displays the timing states of a 7-bit digital counter.
  7. 70    !
  8. 80    ! *******************************************************************
  9. 90    !
  10. 100   ! Define colors and array of colors
  11. 110   !
  12. 120       INTEGER Black,White,Red,Yellow,Green,Cyan,Blue,Magenta,Colors(1:7)
  13. 130       DATA 0,1,2,3,4,5,6,7
  14. 140       READ Black,White,Red,Yellow,Green,Cyan,Blue,Magenta
  15. 150       Colors(1)=White
  16. 160       Colors(2)=Red
  17. 170       Colors(3)=Yellow
  18. 180       Colors(4)=Blue
  19. 190       Colors(5)=Cyan
  20. 200       Colors(6)=Green
  21. 210       Colors(7)=Magenta
  22. 220   !
  23. 230   ! Other variables:
  24. 240   !
  25. 250   !  Display(*):          Used to get display dimensions
  26. 260   !  B(*),C(*),D(*),Ctr,Bitstr$:  Used to implement 7-bit counter
  27. 270   !  Total:               Cumulative count of 7-bit counter
  28. 280   !  N:                   Useful counter
  29. 290   !  Bitstr$:             Gets binary digits
  30. 300   !
  31. 310       INTEGER Display(1:4),B(1:7),C(1:7),D(1:7),Ctr,N,Dw,Dh,W,H,X,Y
  32. 320       DIM Bitstr$[32]
  33. 330       REAL Total
  34. 340   !
  35. 350       GESCAPE CRT,3;Display(*)
  36. 360       Dw=Display(3)-Display(1)
  37. 370       Dh=Display(4)-Display(2)
  38. 380       CLEAR SCREEN
  39. 390   !
  40. 400       W=Dw
  41. 410       H=Dh
  42. 420       X=0
  43. 430       Y=0
  44. 440       GOSUB Buildstrip
  45. 450   !
  46. 460   ! Get ready for main loop. The B(*) and D(*) arrays are used
  47. 470   ! to translate the counter count to trace Y coordinates. The Ctr
  48. 480   ! variable handles the count and the Total keeps a running tally.
  49. 490   !
  50. 500       DATA 1,3,5,7,9,11,13,0,0
  51. 510       READ B(*),Ctr,Total
  52. 520       MAT D=B
  53. 530   !
  54. 540   ! Set up Quit event, turn on PANEL
  55. 550   !
  56. 560       ON EVENT @Strip,"SYSTEM MENU" GOTO Finis
  57. 570       CONTROL @Strip;SET ("VISIBLE":1)
  58. 580   !
  59. 590   ! Loop and update traces
  60. 600   !
  61. 610       LOOP
  62. 620           GOSUB Gettrace
  63. 630       END LOOP
  64. 640       STOP
  65. 650   !
  66. 660   ! *********** End of Main Program ******************
  67. 670   !
  68. 680  Gettrace:!
  69. 690   !
  70. 700   ! The Gettrace routine handles the update of the traces on the display.
  71. 710   ! To begin, take the current counter value and use it to update the trace.
  72. 720   ! The traces are drawn from one Y value to another:
  73. 730   !
  74. 740   !    Bit 0:     0 is Y=1     1 is Y=2
  75. 750   !    Bit 1:     0 is Y=3     1 is Y=4
  76. 760   !    Bit 2:     0 is Y=5     1 is Y=6
  77. 770   !    Bit 3:     0 is Y=7     1 is Y=8
  78. 780   !    Bit 4:     0 is Y=9     1 is Y=10
  79. 790   !    Bit 5:     0 is Y=11    1 is Y=12
  80. 800   !    Bit 6:     0 is Y=13    1 is Y=14
  81. 810   !
  82. 820   ! The B(*) array is effectively simply a set of constants that contains
  83. 830   ! the Y-values that correspond to a 0 value for each trace. The C(*)
  84. 840   ! array is generated using the B(*) array and the counter value to give
  85. 850   ! the Y-values for the actual current count.
  86. 860   !
  87. 870   ! To create the C(*) array from the count, the count is converted
  88. 880   ! into a string using IVAL that gives the counter value in binary
  89. 890   ! (that is, a counter value of 13 gives a string "0000000000001101").
  90. 900   !
  91. 910   ! Then, the string is scanned from right to left (which scans through
  92. 920   ! the count from Bit 0 to Bit 6), and the character "0" or "1" is converted
  93. 930   ! to its numeric equivalent. The result is added to the value in B(*)
  94. 940   ! for the corresponding bit to load into C(*) for the corresponding bit.
  95. 950   !
  96. 960   ! The D(*) array keeps the value from the previous ON CYCLE event.
  97. 970   ! This is done because when you make a transition from a 0 to a 1
  98. 980   ! on a trace you have to plot the old Y value and new Y value at
  99. 990   ! the same X value. If you had instead just plotted each new value
  100. 1000  ! with each ON CYCLE event, the trace transitions would be plotted as
  101. 1010  ! angles with the traces rising and falling between subsequent X values.
  102. 1020  !
  103. 1030       Bitstr$=IVAL$(Ctr,2)
  104. 1040       L=LEN(Bitstr$)
  105. 1050       FOR N=1 TO 7
  106. 1060           C(N)=B(N)+VAL(Bitstr$[L-(N-1);1])
  107. 1070       NEXT N
  108. 1080  !
  109. 1090  ! Draw the traces -- set X location and then plot the previous trace
  110. 1100  ! values followed by the current trace values.
  111. 1110  !
  112. 1120       CONTROL @Strip;SET ("POINT LOCATION":Total)
  113. 1130       CONTROL @Strip;SET ("VALUES":D(*),"VALUES":C(*))
  114. 1140  !
  115. 1150  ! Save the current trace values, and modulo update the 7-bit counter.
  116. 1160  !
  117. 1170       MAT D=C
  118. 1180       Ctr=(Ctr+1) MOD 128
  119. 1190  !
  120. 1200  ! Increment the running total. If numeric overflow, reset STRIPCHART
  121. 1210  ! and start over again. To do this, you black out all the traces,
  122. 1220  ! change the X origin back to 0, draw the traces back to the origin
  123. 1230  ! while they are black (so they will be invisible against the black
  124. 1240  ! background), and then set the colors again.
  125. 1250  !
  126. 1260       Total=Total+1
  127. 1270       IF Total=32767 THEN
  128. 1280           Total=0
  129. 1290           ASSIGN @Strip TO *
  130. 1300           GOSUB Buildstrip
  131. 1310       END IF
  132. 1320       RETURN
  133. 1330  !
  134. 1340  ! *************** Build Stripchart ************************
  135. 1350  !
  136. 1360  Buildstrip:!
  137. 1370  !
  138. 1380  ! Set up main STRIPCHART parameters -- 7 traces, and scroll 1/40th at
  139. 1390  ! a time since the traces are 40 units long.
  140. 1400  !
  141. 1410       ASSIGN @Strip TO WIDGET "STRIPCHART";SET ("VISIBLE":0)
  142. 1420       CONTROL @Strip;SET ("TITLE":"Example: STRIPCHART (Counter States)")
  143. 1430       CONTROL @Strip;SET ("X":50,"Y":25,"WIDTH":.75*W,"HEIGHT":.75*H)
  144. 1440       CONTROL @Strip;SET ("TRACE BACKGROUND":Black)
  145. 1450       CONTROL @Strip;SET ("TRACE COUNT":7,"MINIMUM SCROLL":1/40)
  146. 1460  !
  147. 1470  ! Set up X-axis parameters -- initial origin (before scrolling) of 1,
  148. 1480  ! trace display width of 40, keep numbering on and set it to 5 digits.
  149. 1490  !
  150. 1500       CONTROL @Strip;SET ("CURRENT AXIS":"X","ORIGIN":0,"RANGE":40)
  151. 1510       CONTROL @Strip;SET ("NUMBER FORMAT":"FIXED","DIGITS":5)
  152. 1520  !
  153. 1530  ! Set up Y-axis parameters -- enough range for 7 traces, turn off
  154. 1540  ! numbering.
  155. 1550  !
  156. 1560       CONTROL @Strip;SET ("CURRENT AXIS":"Y")
  157. 1570       CONTROL @Strip;SET ("ORIGIN":0,"RANGE":15,"SHOW NUMBERING":0)
  158. 1580  !
  159. 1590  ! Set up seven traces -- different color and label for each.  (The
  160. 1600  ! first 8 traces actually have distinctive colors, but they are set
  161. 1610  ! to show how to do it.)
  162. 1620  !
  163. 1630       FOR N=1 TO 7
  164. 1640           CONTROL @Strip;SET ("CURRENT TRACE":N,"TRACE PEN":Colors(N))
  165. 1650           CONTROL @Strip;SET ("TRACE LABEL":"BIT "&VAL$(N-1))
  166. 1660       NEXT N
  167. 1670  !
  168. 1680       CONTROL @Strip;SET ("MAXIMIZABLE":0,"RESIZABLE":0)
  169. 1690       CONTROL @Strip;SET ("SYSTEM MENU":"Quit","VISIBLE":1)
  170. 1700       RETURN
  171. 1710  !
  172. 1720  ! ********************  Go Here on Exit ************************
  173. 1730  !
  174. 1740  ! The ON CYCLE is disabled before destroying the STRIPCHART.
  175. 1750  ! Otherwise, it might call the handler and cause an error, since the
  176. 1760  ! handler does not have any widgets remaining.
  177. 1770  !
  178. 1780  Finis:!
  179. 1790       OFF CYCLE         ! Stop ON CYCLE *FIRST!*
  180. 1800       ASSIGN @Strip TO *! Delete STRIPCHART widget
  181. 1810       END
  182.